package br.com.sis.rh.entity;

import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToOne;
import javax.persistence.OneToOne;

import org.hibernate.search.annotations.IndexedEmbedded;

@Entity
public class Alocacao extends Entidade {

	/**
	 * Serial UID.
	 */
	private static final long serialVersionUID = 1L;

	@OneToOne
	private Cargo cargo;
	
	@IndexedEmbedded
	@OneToOne
	private Empresa empresa;
	
	@OneToOne
	private PeriodoAlocacao periodoAlocacao;
	
	@OneToOne
	private ModalidadeContratacao modalidadeContratacao;
	
	private String observacao;
	private String dataInicio;
	private String dataFim;
	private String atual;
	
	@ManyToOne
	@JoinTable(name="Candidato_Alocacao", 
			joinColumns={@JoinColumn(name="alocacao_id", referencedColumnName="id")
		},	
			inverseJoinColumns={@JoinColumn(name="candidato_id", referencedColumnName="id")}
	)
	private Candidato candidato;		
	
	public Cargo getCargo() {
		return cargo;
	}

	public void setCargo(Cargo cargo) {
		this.cargo = cargo;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

	public PeriodoAlocacao getPeriodoAlocacao() {
		return periodoAlocacao;
	}

	public void setPeriodoAlocacao(PeriodoAlocacao periodoAlocacao) {
		this.periodoAlocacao = periodoAlocacao;
	}

	public String getObservacao() {
		return observacao;
	}

	public void setObservacao(String observacao) {
		this.observacao = observacao;
	}

	public String getDataInicio() {
		return dataInicio;
	}

	public void setDataInicio(String dataInicio) {
		this.dataInicio = dataInicio;
	}
	public String getDataFim() {
		return dataFim;
	}
	public void setDataFim(String dataFim) {
		this.dataFim = dataFim;
	}
	public String getAtual() {
		return atual;
	}

	public void setAtual(String atual) {
		this.atual = atual;
	}

	public ModalidadeContratacao getModalidadeContratacao() {
		return modalidadeContratacao;
	}

	public void setModalidadeContratacao(ModalidadeContratacao modalidadeContratacao) {
		this.modalidadeContratacao = modalidadeContratacao;
	}
	
	public Candidato getCandidato() {
		return candidato;
	}

	public void setCandidato(Candidato candidato) {
		this.candidato = candidato;
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + ((getId() == null) ? 0 : getId().hashCode());
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (!(obj instanceof Alocacao))
			return false;
		Alocacao other = (Alocacao) obj;
		if (getId() == null) {
			if (other.getId() != null)
				return false;
		} else if (!getId().equals(other.getId()))
			return false;
		return true;
	}
}
